package com.ssy.lingxi.message.service;


import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.model.vo.PageVO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.message.api.vo.request.*;
import com.ssy.lingxi.message.api.vo.response.MessageResponse;
import com.ssy.lingxi.message.enums.MessageNoticeEnum;

import java.util.List;


/**
 * 消息服务类
 * @author yzc
 * @version 2.0.0
 * @date 2020/10/27
 */
public interface IMemberMessageService {

    /**
     * 系统能力-消息中心-消息分页列表
     * @param request 请求参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<PageData<MessageResponse>> pageMemberMessage(PageVO request, UserLoginCacheDTO loginUser);

    /**
     * 平台后台-消息管理-历史消息分页列表
     * @param request 请求参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<PageData<MessageResponse>> pagePlatformMessage(PageVO request, UserLoginCacheDTO loginUser);

    /**
     * 能力中心未读消息数
     * @param memberId 会员id
     * @param roleId 角色id
     * @param userId
     * @return 返回结果
     */
    int countUnreadMemberMessage(Long memberId, Long roleId, Long userId);

    /**
     * 平台后台未读消息数
     * @return 返回结果
     */
    int countUnreadPlatformMessage();

    /**
     * 拉取主消息
     * @param recMemberId 会员id
     * @param recRoleId 角色id
     * @param recUserId 用户id
     */
    void pullMainMessage(Long recMemberId, Long recRoleId, Long recUserId);

    /**
     * 系统能力-消息管理-删除消息
     * @param request 请求参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<Void> deleteMemberMessage(MessageIdsRequest request, UserLoginCacheDTO loginUser);

    /**
     * 能力中心设置已读消息
     * @param request 请求参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<Void> updateReadMemberMessage(MessageIdRequest request, UserLoginCacheDTO loginUser);

    /**
     * 平台后台设置已读消息
     * @param request 请求参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<Void> updateReadPlatformMessage(MessageIdRequest request, UserLoginCacheDTO loginUser);

    /**
     * 能力中心设置全部已读消息
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<Void> updateAllReadMemberMessage(UserLoginCacheDTO loginUser);

    /**
     * 平台后台设置全部已读消息
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<Void> updateAllReadPlatformMessage(UserLoginCacheDTO loginUser);

    /**
     * 发送系统消息
     */
    void sendSystemMessage(SystemMessageRequest systemMessageRequest);

    /**
     * 发送系统消息
     * @param request 请求参数
     */
    void batchSendSystemMessage(List<SystemMessageRequest> request);

    /**
     * 会员发送消息
     * @param sendMemberId 发送会员id
     * @param sendRoleId 发送会员角色
     * @param recMemberId 发送会员id
     * @param recRoleId 发送角色id
     * @param messageNoticeEnum 消息模板枚举
     * @param params 消息模板参数
     * @param urlParams url参数
     */
    void sendMemberMessage(Long sendMemberId, Long sendRoleId, Long recMemberId, Long recRoleId, MessageNoticeEnum messageNoticeEnum, List<String> params, List<String> urlParams);

    /**
     * 发送自定义消息
     * @param request 请求参数
     */
    void sendCustomMessage(SystemMessageCustomRequest request);

    /**
     * 商城能力 - 邀请成为我的会员
     * @param request 接口参数
     * @param loginUser 登录用户信息
     * @return 返回结果
     */
    Wrapper<Void> sendInviteMessage(MessageInviteMemberRequest request, UserLoginCacheDTO loginUser);
}

